package bank;

public class _11MaxWatercup {
    public static int maxArea(int[] height) {
        /**
         *可能运行超时！！
        //我的思路：每个柱子与之后的柱子都可以形成一个水杯，这之中每个水杯的水量存在一个最大值
        //比较每个柱子（与之后的柱子）存储的最大水量，从而比较出总的最大盛水量
        int maxArea = 0,len = height.length;
        for (int i = 0; i < len; i++) {
            for (int j = i+1; j < len; j++) {
                maxArea = Math.max(maxArea,(j-i)*Math.min(height[i],height[j]));
            }
        }
        return maxArea;
        */
        //采用更先进的算法：双指针算法
        //算法核心：假设左右指针只朝向互相移动
        //那么指向元素较大的指针无论移动多少，盛水量始终会减少！
        //此时视为需要舍弃指向元素较小的指针，因为该指针已经失去了作为边界的资格！
        int len = height.length;
        int left = 0,right = len-1;
        int res = 0;
        while (left < right){
            //初始盛水量
            int area = (right-left)*Math.min(height[left],height[right]);
            res = Math.max(res,area);
            if(height[left] < height[right]){
                left++;
            }else {
                right--;
            }
        }
        return res;
    }
}
